package demo04

/**
 * @author xiaoZhao
 * @date 2022/6/29
 * @describe
 */
object Test10_Recursion {
  def main(args: Array[String]): Unit = {
    println(fact(5))
  }

  // 递归实现计算阶乘
  def fact(n: Int): Int = {
    if (n == 0) return 1
    fact(n - 1) * n
  }

  // 尾递归
  def tailFact(n: Int): Int = {
    @transient // 保证写的代码是一个尾递归
    def loop(n: Int, res: Int): Int = {
      if(n == 0) return res
      loop(n-1,res * n)
    }
    loop(n,1)
  }
}
